component
{
		function createCollectionItem( source, sourceItem, targetProperty, mapping, mappingChain)
		{
			var sourceItemClass = getMetadata( sourceItem );
			var targetItemClass = mapping.getAggregatedPropertyTargetTypes()[ targetProperty.getName() ];
			var targetItem = mapper.getMapper().getGraphedInstanceFactory().createByTargetClass( sourceItem, targetItemClass );
			
			if ( mapper.getMapper().mappingExistsBetweenByMetadata( sourceItemClass, targetItemClass ) )
			{
				return mapper.getMapper().map( sourceItem, targetItem, mappingChain );
			}
			else
			{
				var e  = "Mapper can't handle the contents of the collection property """ & targetProperty.name & """\n\t" &
					"because the contents of the source type, """ & Type.forClass(sourceItemClass).fullName & """\n\t" &
					"and the type of the declared target type, """ & Type.forClass( targetItemClass ).fullName & """ do not have a mapping.\n\t" &
					"Please create such a mapping, and it'll be able to follow your collection.";
				
				writeLog( e );
				throw( e );
			}
		}
}